C++ 精度 : String to Double
全部标签 由于有两种实现AP小数的方法,一种是模拟double数据类型的存储和行为,只是使用更多字节,另一种是使用现有整数将小数表示为有理数的APA实现,即作为一对整数、分子和分母,这两种方式中的哪一种更有可能在性能方面提供高效的算术?(内存使用确实是次要问题。)我知道现有的C/C++库,其中一些库提供带“float”的小数APA,另一些带有理数(但是,它们都不具有定点APA),当然我可以对一个库进行基准测试依赖于“float”实现而不是利用合理实现的实现,但结果在很大程度上取决于我必须从近十个可用库中随机选择的那些特定库的实现细节。因此,我感兴趣的是两种方法(如果考虑定点APA,则为三种方法)
有没有办法将float舍入到2点?例如:3576.7675745342556变为3576.76。 最佳答案 round(x*100)/100.0如果你必须让事物保持float:roundf(x*100)/100.0使用标准库函数的灵活版本:doubleGetFloatPrecision(doublevalue,doubleprecision){return(floor((value*pow(10,precision)+0.5))/pow(10,precision));} 关于c++-限制
我很好奇:如果你执行printf("%f",number);语句的精度是多少?IE。将显示多少位小数?这个编译器依赖吗? 最佳答案 ANSIC标准在第7.19.6.1节中对f格式说明符进行了说明:Iftheprecisionismissing,6digitsaregiven 关于c++-什么是cprintf%f默认精度?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/120776
我正在寻找适用于C/C++的任意精度浮点库(首选纯C)。我需要任意精度指数。GMP和MPFR使用固定大小的指数,因此它们不合格(我有一些解决方法的想法,但我更喜欢开箱即用的解决方案)。如果可以自动调整指数精度以防止出现无穷大值,那将是一个不错的功能。如果您确定不存在这样的库,请说出来。 最佳答案 据我所知,没有什么比GMP/MPFR更主流的了。但是FredrikJohansson的arb包含一个名为fmpr的模块提供具有任意精度指数的float。 关于c++-是否存在允许任意精度指数的C
我目前正在查看codewhichdoesmulti-precisionfloating-pointarithmetic.为了正常工作,该代码需要在明确定义的点将值降低到最终精度。因此,即使中间结果计算为80bitextendedprecision浮点寄存器,在某些时候它必须四舍五入为64bitdouble用于后续操作。代码中使用宏INEXACT来描述这个需求,但没有一个完美的定义。gccmanual提到-fexcess-precision=standard作为强制强制转换和赋值操作定义明确的精度的方法。然而,它也写道:‘-fexcess-precision=standard’isnot
所以我在参加计算机竞赛时发现了一个奇怪的错误。pow(26,2)总是返回675,有时返回674?即使正确答案是676。这类错误也会发生在pow(26,3)、pow(26,4)等中经过比赛后的一些调试,我相信答案与int向下舍入有关。有趣的是,我以前从未发生过这种错误。我的电脑在Windows8上运行mingw。GCC版本相当新,我相信大概有2-3个月大。但我发现,如果我打开o1/o2/o3优化标志,这类错误就会奇迹般地消失。pow(26,2)总是会得到676也就是正确答案谁能解释为什么?#include#includeusingnamespacestd;intmain(){coutdo
我是C编程的新手,我正在从事一个需要非常准确的时间的项目;因此我尝试写一些东西来创建一个精确到毫秒的时间戳。这似乎可行,但我的问题是这种方法是否正确,或者是否有更简单的方法?这是我的代码:#include#includevoidwait(intmilliseconds){clock_tstart=clock();while(1)if(clock()-start>=milliseconds)break;}intmain(){time_tnow;clock_tmilli;intwaitMillSec=2800,seconds,milliseconds=0;structtm*ptm;now=
Windows上的时钟精度最近似乎发生了变化。我记得自Windows7(1毫秒分辨率)以来它非常准确,现在时间以15到16毫秒的步长跳跃。我注意到由于一些(尽管写得不好)单元测试失败(测试检查写入和读取记录之间经过了一段时间)。这会影响以下实现:System.currentTimeMillis()LocalTime.now()LocalDateTime.now()ZonedDateTime.now()我很清楚耗时是使用System.nanoTime()增量来测量的,但我想知道我是否错过了将时钟分辨率改回到15-16毫秒的东西.环境:Windows10版本1709JRE/JDK1.8.0
我发现OpenCL中主机-客户端float标准存在问题。问题是在x86中编译时,由Opencl计算的float与我的visualstudio2010编译器不在相同的float限制内。但是,在x64中编译时,它们处于相同的限制。我知道它必须与http://www.viva64.com/en/b/0074/有关我在测试期间使用的来源是:http://www.codeproject.com/Articles/110685/Part-1-OpenCL-Portable-Parallelism当我在x86中运行该程序时,当内核和C++程序采用1269760个数字的平方时,它会给我202个相等的数
我想在Windows平台上以微秒精度计算函数的性能。现在Windows本身就有毫秒级的粒度,那我怎么实现呢。我尝试了以下示例,但没有得到正确的结果。LARGE_INTEGERticksPerSecond={0};LARGE_INTEGERtick_1={0};LARGE_INTEGERtick_2={0};doubleuSec=1000000;//GetthefrequencyQueryPerformanceFrequency(&ticksPerSecond);//CalculateperuSecfreqdoubleuFreq=ticksPerSecond.QuadPart/uSec;